//
//  CZStatusViewModel.swift
//  Weibo28
//
//  Created by Apple on 16/5/13.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
//  cell对应的ViewModel
class CZStatusViewModel: NSObject {
    var status: CZStatus?
    //  转发微博内容
    var retweetContent: String?
    
    //  转发数内容
    var retweetCountContent: String?
    //  评论数
    var commentCountContent: String?
    //  赞
    var unlikeCountContent: String?
    
    //  来源
    var sourceContent: String?
    
    //  会员等级图片
    var mbrankImage: UIImage?
    
    //  认证等级类型图片
    var verifiedTypeImage: UIImage?
    
    //  时间, 定义计算属性的目的是,根据当前时间和发微博时间进行计算 获取秒数或者进行时间格式化
    var timeContent: String? {
    
        //  获取发微博的时间
        guard let createAt = status?.created_at else {
            return nil
        }
        
        return NSDate.sinaDate(createAt).sinaDateString
        
        //  代码执行到此createAt 一定有值 Mon May 16 10:39:03 +0800 2016
        
//        let dateFormatter = NSDateFormatter()
//        //  指定本地化信息
//        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
//        //  格式化时间
//        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//        
//        let createAtDate = dateFormatter.dateFromString(createAt)!
//        print(createAtDate)
//        
//        //
//        
//        /*
//        判断是否是今年
//            判断是否是今天
//                判断是否是1分钟以内
//                    刚刚
//                判断是否是1小时之前
//                    xx分钟前
//                其它
//                    xx小时前
//            判断是否是昨天
//                昨天 09:02
//            其它
//                05-06 10:02
//        不是今年
//            2015-10-10 10:10
//        
//        */
//        
//        if isThisYear(createAtDate) {
//            //  是今年
//            let calendar = NSCalendar.currentCalendar()
//            //  判断是否是今天
//            if calendar.isDateInToday(createAtDate) {
//            
//                //  判断是否在1分钟之内
//                //  获取时间差值的方式1
//                // createAtDate.timeIntervalSinceDate(<#T##anotherDate: NSDate##NSDate#>)
//                //  获取时间差值的方式2
//                //  使用abs 或者 '-' 取正数
//          
//                let timeInterval = abs(createAtDate.timeIntervalSinceNow)
//                
//                if timeInterval < 60 {
//                    return "刚刚"
//                } else if timeInterval < 3600 {
//                    let result = timeInterval / 60
//                    return "\(Int(result))分钟前"
//                } else {
//                    let result = timeInterval / 3600
//                    return "\(Int(result))小时前"
//                }
//                
//                
//            } else if calendar.isDateInYesterday(createAtDate) {
//                //  昨天
//                dateFormatter.dateFormat = "昨天 HH:mm"
//            } else {
//                //  其它
//                dateFormatter.dateFormat = "MM-dd HH:mm"
//            }
//            
//            
//            
//        } else {
//            //  不是今年
//            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
//            
//        }
//        
//        
//        return dateFormatter.stringFromDate(createAtDate)
    
    }
    
    
    //  原创微博富文本
    var origianlAttributedString: NSAttributedString?
    //  转发微博富文本
    var retweetAttributedString: NSAttributedString?
    
    init(status: CZStatus) {
        super.init()
        self.status = status
        //  处理转发微博内容
        handleRetWeetContent(status)
        //  转发数
        retweetCountContent = handleCountContent(status.reposts_count, defaultTitle: "转发")
        //  评论数
        commentCountContent = handleCountContent(status.comments_count, defaultTitle: "评论")
        //  赞数
        unlikeCountContent = handleCountContent(status.attitudes_count, defaultTitle: "赞")
        
        //  处理来源数据
        handleSourceContent(status)
        
        //  处理会员等级图片显示
        handleMBrankImage(status.user?.mbrank ?? 0)
        //  处理认证等级类型图片显示
        handleVerifiedTypeImage(status.user?.verified_type ?? 0)
        
        //  处理微博内容的表情字符串
        //  设置原创微博富文本
        origianlAttributedString = handleEmoticonContentWithStatus(status.text!)
    }
    
    //  通过微博内容处理里面的表情字符串转表情富文本
    private func handleEmoticonContentWithStatus(status: String) -> NSAttributedString {
        //  将微博内容转成富文本,便于我们后面使用,直接设置给我们原创微博与转发微博的富文本
        let result = NSMutableAttributedString(string: status)
        
        //  根据微博内容匹配表情字符串 '正则表达式'
        //   1. "正则表达式"
        
        //   usingBlock :  1. 匹配格式,2 匹配到内容的指针,3匹配到范围的值,4. 是否停止的指针
        
        var matchResultArray = [CZMatchResult]()
        
        (status as NSString).enumerateStringsMatchedByRegex("\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]") { (captureCount, captureString, captureRange, _) -> Void in
            
            //  获取指针对应的内容

            //  把NSString转成我们需要String
            if let emotionStr = captureString.memory as? String {
                
                let matchResult = CZMatchResult(string: emotionStr, range: captureRange.memory)
                
                matchResultArray.append(matchResult)

            }
            
        }
        //  倒序遍历
        for value in matchResultArray.reverse() {
            
            if let emoticon = CZEmoticonTools.sharedTools.emoticonWithEmoticonStr(value.string) {
                //  创建表情富文本
                let emoticonAttr = NSAttributedString.attributedWithEmotion(emoticon, font: UIFont.systemFontOfSize(HomeFontSize))
                //  替换表情富文本
                result.replaceCharactersInRange(value.range, withAttributedString: emoticonAttr)
                
            }
            
            
        }
        return result
    }
    
    
    //  转发微博内容拼接字符串
    private func handleRetWeetContent(status: CZStatus) {
        
        guard let retweet = status.retweeted_status?.text else {
            return
        }
        //  代码执行到retweet(转发微博)一定存在
        
        guard let name = status.retweeted_status?.user?.screen_name else {
            return
        }
        
        //  拼接转发微博内容
        
        retweetContent = "@\(name): \(retweet)"
        
        //  设置转发微博的富文本
        retweetAttributedString = handleEmoticonContentWithStatus(retweetContent!)
        
    }
    //  处理转发,评论,赞的数据
    private func handleCountContent(count: Int, defaultTitle: String) -> String {
        if count > 0 {
            
            if count >= 10000 {
                //  处理显示格式
                let result = CGFloat(count / 1000 / 10)
                
                let resultStr = "\(result)万"
                
                if resultStr.containsString(".0") {
                    return resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                
                return resultStr
                
                
            } else {
                return "\(count)"
            }
            
            
        
        } else {
            return defaultTitle
        }
    
    }
    
    //  处理来源数据
    private func handleSourceContent(status: CZStatus) {
        //  判断是否存在
        guard let source = status.source else {
            return
        }
        
        //  代码执行到此,来源数据一定存在
        //  '\'转译符号
        
        if source.containsString("\">") {
            let startIndex = source.rangeOfString("\">")?.endIndex
            let endIndex = source.rangeOfString("</")?.startIndex
            
            if let start = startIndex, end = endIndex {
                sourceContent = source.substringWithRange(start..<end)
            }
            
        }
        
    }
    
    //  处理会员等级图片
    private func handleMBrankImage(count: Int) {
        //  合法的取值范围
        if count > 0 && count < 7 {
            mbrankImage = UIImage(named: "common_icon_membership_level\(count)")
        }
    }
    
    //  处理认证类型等级图片
    private func handleVerifiedTypeImage(verified: Int) {
        //  认证类型 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        switch verified {
        case 0:
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2, 3, 5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
        }
        
    }
    
//    //  根据发微博时间判断是否是今年
//    private func isThisYear(createAtDate: NSDate) -> Bool {
//        //  获取当前时间
//        let currentDate = NSDate()
//        
//        let dateFormatter = NSDateFormatter()
//        //  设置本地化信息
//        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
//        //  设置格式化方式
//        dateFormatter.dateFormat = "yyyy"
//        
//        //  获取当前时间的年份
//        let currentDateYear = dateFormatter.stringFromDate(currentDate)
//        //  获取发微博时间的年份
//        let createAtDateYear = dateFormatter.stringFromDate(createAtDate)
//        
//        
//        return currentDateYear == createAtDateYear
//    
//    }
    
    
    
}
